home *** CD-ROM | disk | FTP | other *** search
/ HAKERIS 11 / HAKERIS 11.ISO / linux / system / LinuxConsole 0.4 / linuxconsole0.4install-en.iso / guile0.4.lcm / share / guile / 1.6.0 / scripts / snarf-guile-m4-docs < prev    next >
Encoding:
Text File  |  2004-01-06  |  2.9 KB  |  89 lines

  1. #!/bin/sh
  2. # aside from this initial boilerplate, this is actually -*- scheme -*- code
  3. main='(module-ref (resolve-module '\''(scripts snarf-guile-m4-docs)) '\'main')'
  4. exec ${GUILE-guile} -l $0 -c "(apply $main (cdr (command-line)))" "$@"
  5. !#
  6. ;;; snarf-guile-m4-docs --- Parse guile.m4 comments for texi documentation
  7.  
  8. ;;     Copyright (C) 2002 Free Software Foundation, Inc.
  9. ;;
  10. ;; This program is free software; you can redistribute it and/or
  11. ;; modify it under the terms of the GNU General Public License as
  12. ;; published by the Free Software Foundation; either version 2, or
  13. ;; (at your option) any later version.
  14. ;;
  15. ;; This program is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18. ;; General Public License for more details.
  19. ;;
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with this software; see the file COPYING.  If not, write to
  22. ;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  23. ;; Boston, MA 02111-1307 USA
  24.  
  25. ;;; Author: Thien-Thi Nguyen <ttn@gnu.org>
  26.  
  27. ;;; Commentary:
  28.  
  29. ;; Usage: snarf-guile-m4-docs FILE
  30. ;;
  31. ;; Grep FILE for comments preceding macro definitions, massage
  32. ;; them into valid texi, and display to stdout.  For each comment,
  33. ;; lines preceding "^# Usage:" are discarded.
  34. ;;
  35. ;; TODO: Generalize.
  36.  
  37. ;;; Code:
  38.  
  39. (define-module (scripts snarf-guile-m4-docs)
  40.   :use-module (ice-9 rdelim)
  41.   :export (snarf-guile-m4-docs))
  42.  
  43. (define (display-texi lines)
  44.   (display "@deffn {Autoconf Macro}")
  45.   (for-each (lambda (line)
  46.               (display (cond ((and (>= (string-length line) 2)
  47.                    (string=? "# " (substring line 0 2)))
  48.                   (substring line 2))
  49.                  ((string=? "#" (substring line 0 1))
  50.                   (substring line 1))
  51.                  (else line)))
  52.               (newline))
  53.             lines)
  54.   (display "@end deffn")
  55.   (newline) (newline))
  56.  
  57. (define (prefix? line sub)
  58.   (false-if-exception
  59.    (string=? sub (substring line 0 (string-length sub)))))
  60.  
  61. (define (massage-usage line)
  62.   (let loop ((line (string->list line)) (acc '()))
  63.     (if (null? line)
  64.         (list (list->string (reverse acc)))
  65.         (loop (cdr line)
  66.               (cons (case (car line)
  67.                       ((#\( #\) #\,) #\space)
  68.                       (else (car line)))
  69.                     acc)))))
  70.  
  71. (define (snarf-guile-m4-docs . args)
  72.   (let* ((p (open-file (car args) "r"))
  73.          (next (lambda () (read-line p))))
  74.     (let loop ((line (next)) (acc #f))
  75.       (or (eof-object? line)
  76.           (cond ((prefix? line "# Usage:")
  77.                  (loop (next) (massage-usage (substring line 8))))
  78.                 ((prefix? line "AC_DEFUN")
  79.                  (display-texi (reverse acc))
  80.                  (loop (next) #f))
  81.                 ((and acc (prefix? line "#"))
  82.                  (loop (next) (cons line acc)))
  83.                 (else
  84.                  (loop (next) #f)))))))
  85.  
  86. (define main snarf-guile-m4-docs)
  87.  
  88. ;;; snarf-guile-m4-docs ends here
  89.